#include <bits/stdc++.h>

using namespace std;

bool funcomp(char lhs, char rhs)
{
	return lhs > rhs; // 降序排列
}

class classcomp {
	public: // 类的成员函数必须是public,若static作为类关键字则默认是public
	bool operator() (const char &lhs, const char &rhs) const
	{
		return lhs > rhs; // 降序排列
	}
};

int main(void)
{
	/* 有序map，默认为升序排列 */
	map<char, int> m1; // 默认构造函数
	m1['a'] = 1;
	m1['b'] = 2;
	m1['c'] = 3;
	m1['d'] = 4;
	m1['e'] = 5;
	// pair<>表示一个键值对，pair的第一个参数是key，第二个参数是value
	m1.insert(pair<char, int>('f', 6)); // 插入元素

	map<char, int> m2(m1.begin(), m1.end()); // 迭代器构造函数
	map<char, int> m3(m1); // 拷贝构造函数
	map<char, int, classcomp> m4; // 自定义类并重载运算符作为排序函数

	bool(*fn_pt)(char, char) = funcomp; // 函数指针
	map<char, int, bool (*) (char, char) > m5(fn_pt); // 自定义函数指针作为排序函数，直接写 m5(funcomp); 也可以
	m5['a'] = 1;
	m5['b'] = 2;
	m5['c'] = 3;
	m5['d'] = 4;
	m5['e'] = 5;
	
	// 迭代器
	for (auto it = m1.begin(); it != m1.end(); ++it) {
		cout << it->first << " " << it->second << endl;
	}

	return 0;
}
